import java.util.Arrays;

public class Demo1 {
    //示例一:实现一个方法,判断是否的闰年
    public static boolean isLeapYear(int year){
        if(year%4==0&&year%100!=0||year%400==0){
            return true;
        }
        return false;
    }
    //实现一个两个整数相加的方法
    public static int add(int x,int y){
        return x+y;
    }
    //要注意的事项
    //1.如果有返回值,返回值类型必须与方法中发返回的实体类型一样,如果没有返回值,必须写成void
    //2.采用小驼峰命名 3.如果方法没有参数,()中什么都不写,如果有,多个参数之间要用,隔开.
    //3.java中方法必须写在类当中  4.方法不能嵌套定义
    //接着介绍一下,方法的执行过程.
    //调用方法->传递参数->找到方法地址->执行被调用的方法体->被调方法结束返回->回到主调方法继续往下执行.
    //调用方法->传递参数->找到方法地址->执行被调用的方法体->被调方法结束返回->回到主调方法继续往下执行.
    //计算阶乘
    public static int fac(int n){
        System.out.println("计算"+n+"的阶乘");
        int t=1,j=1;
        while(t<=n){
            j*=t;
            t++;
        }
        return j;
    }

    public static void main(String[] args) {
        //这里复习一下方法
        //方法就是一个代码模块:1.是能够模块化的组织代码
        //2.做到代码复用,一份代码可以在多个位置使用
        //3.让代码更好的理解更简单
        //4.直接调用现有方法,不必重复造轮子.
        //方法的定义
        //修饰符 返回值类型 方法名(参数列表){
        //  方法体代码
        //  return 返回值}
        int t=fac(5);
        System.out.println(t);
        int c=2,d=10;
       // swap(c,d);
        //System.out.println(c+""+d);
        int[] t1=new int[]{1,4};
        swap(t1);
        System.out.println(Arrays.toString(t1));
    }
    //实参和形参的关系.
    //形参的名字可以随意取,对方法都没有任何影响,形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的
    //值
    //在java中,实参的值永远都是拷贝到形参中,形参和实参本质上是两个实体
    //在java中,实参的值永远都是拷贝到形参中,形参和实参本质上是两个实体.
    //交换两个整型变量
    public static void swap(int a,int b){
        int temp=a;
        a=b;
        b=temp;
    }
    //可以说明的是,在java中,实参的值永远都是拷贝到形参中,形参和实参本质上是两个实体.
    //栈上的形参进行了交换,方法调用结束之后,在栈上销毁了形参,对实参的值没有任何影响.
    //可以通过传引用类型的参数来解决这个问题.
    public static void swap(int[] arr){
        int tem=arr[0];
        arr[0]=arr[1];
        arr[1]=tem;
    }
    //由于是传址调用,可以通过地址修改堆上的值.
    //方法的返回值是可选的,有些时候可以没有的,没有时返回值类型必须写成void
    //方法的重载:
    //1.在java中,如果多个方法的名字相同,参数列表不同,则称该方法被重载了.
    //2.方法名字必须相同,参数列表必须不同(参数的个数不同/参数的类型不同/参数的次序不同)
    //3.与返回值类型是否相同无关.
    public static int add1(int x,int y){
        return x+y;
    }
    public static double add1(double x,double y){
        return x+y;
    }
    //这就构成了方法的重载.
    //如果只是返回值不同,则不构成方法的重载
   /* public static float add1(int x,int y){
        return 1.3f;
    }

    */
    //方法的签名
    //在同一个作用域中不能定义两个相同名称的标识符,比如:方法中不能定义两个名字一样的变量,那为什么类中的
    //方法就可以方法名相同呢?
    //方法签名即:经过编译器修改之后方法最终的名字,具体方式:方法全路径名+参数列表+返回值类型,构成方法完整的名字.

}

